/**
 * @作者 伟子涵
 * @微信公号 搬砖暗夜码农
 * @开源项目 $ https://gitee.com/zhouwei5208888
 * @我的博客 $ http://itzhouwei.com
 * @创建时间 2023/9/27 16:35
 */
package com.itzhouwei.rpc.client;

import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

import java.net.SocketAddress;

/**
 * @description: 实际的业务处理器
 * @author：zw，微信：yingshengzw
 * @date: 2023/9/27
 * @Copyright： 公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、分享、成长，让自己和他人都能有所收获！
 */
@SuppressWarnings("all")
public class RpcClientHandler extends SimpleChannelInboundHandler<Object> {

    private Channel channel;


    private SocketAddress remotePeer;
    /***
     * 通道激活的时候触发此方法
     * @param ctx
     * @throws Exception
     */
    @Override
    public void  channelActive(ChannelHandlerContext ctx) throws Exception{
        super.channelActive(ctx);
        this.remotePeer = this.channel.remoteAddress();
    }


    /***
     * 通道注册的时候 触发此方法
     * @param ctx
     * @throws Exception
     */
    @Override
    public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
        super.channelRegistered(ctx);
        this.channel=ctx.channel();
    }

    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {

    }

    public SocketAddress getRemotePeer() {
        return this.remotePeer;
    }

    /***
     * Netty 提供了一种主动关闭连接的方式 发送一个 Unpooled.EMPTY_BUFFER 这样我们的 ChannelFutureListener.CLOSE
     * 的事件就会监听到并关闭连接和通道
     */
    public void close() {
        channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
    }
}
